有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

午夜(上午12点)java更新小部件失败

我有一个带有小部件的Hijri日历应用程序。Hijri日历的日期应在午夜使用AlarmManager更改。问题是,尽管使用Alarm Manager来安排午夜更新,但小部件并没有在午夜12点准确更新。它将在凌晨12点到1点之间更新

我哪里做错了

爪哇:

private static PendingIntent service = null;
private static long UPDATES_CHECK_INTERVAL = 24 * 60 * 60 * 1000;


    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
    {

        schedule(context);
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }


    protected void schedule(Context context) {
        final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        final Calendar TIME = Calendar.getInstance();
        Date now = new Date();
        TIME.add(Calendar.DAY_OF_MONTH, 1);
        TIME.set(Calendar.HOUR_OF_DAY, 0);
        TIME.set(Calendar.MINUTE, 0);
        TIME.set(Calendar.SECOND, 0);
        TIME.set(Calendar.MILLISECOND, 0);

        long firstTime = (TIME.getTimeInMillis()-now.getTime());

        final Intent i = new Intent(context, UpdateService.class);

        if (service == null)
        {
            service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
        }

        m.setRepeating(AlarmManager.RTC, firstTime, UPDATES_CHECK_INTERVAL, service);
    }

清单:

<receiver 安卓:name="com.example.app.Widget" 安卓:label="Calendar" 安卓:exported="false">
    <intent-filter >
        <action 安卓:name="安卓.appwidget.action.APPWIDGET_UPDATE" />
        <action 安卓:name="安卓.appwidget.action.APPWIDGET_ENABLED" />
        <action 安卓:name="安卓.intent.action.TIMEZONE_CHANGED" />
        <action 安卓:name="安卓.intent.action.TIME_SET" />
        <action 安卓:name="安卓.intent.action.DATE_CHANGED" />
    </intent-filter>

    <meta-data
        安卓:name="安卓.appwidget.provider"
        安卓:resource="@xml/widget_info" />
</receiver>

共 (1) 个答案

  1. # 1 楼答案

    我认为您需要更改与日历和AlarmManager相关的代码

    这个日历代表第二天午夜的确切时间。AlarmManager将在每天的时间触发意图

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.HOUR, 0);
    calendar.set(Calendar.AM_PM, Calendar.AM);
    calendar.add(Calendar.DAY_OF_MONTH, 1); 
    
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, service);
    

    注意:我认为应该在onEnabled()方法中添加上述代码Here is a highlight of the AppWidgetProvider's related methods